package com.masita.logica;

import java.sql.*;
import java.util.Vector;

public class EntregaCondicionada {
	
	private int id_entrega;
	private int id_ficha;

	private int id_producto;
	private Producto producto;
	private int id_talle;
	
	private String fecha_entrega;
	private int cantidad;
	
	public EntregaCondicionada(int id_ent, int id_f, int id_prod, int id_t,
							   String fec, int c){
		this.id_entrega = id_ent;
		this.id_ficha = id_f;
		this.id_producto = id_prod;
		this.id_talle = id_t;
		this.fecha_entrega = new String(fec);
		this.cantidad = c;
		
		this.producto = null;		
	}

	// METODO GET DE LA CLASE *****************************	
	public int getCantidad(){
		return cantidad;
	}

	public String getFechaEntrega(){
		return fecha_entrega;
	}

	public int getIdFicha(){
		return id_ficha;
	}

	public int getIdEntregaCond(){
		return this.id_entrega;
	}

	public int getIdProducto(){
		return id_producto;
	}

	public int getIdTalle(){
		return id_talle;
	}

	public Producto getProducto(){
		if( this.producto == null && this.id_producto != 0 )
			this.producto = Producto.getProducto(this.id_producto);
		return producto;
	}

	// METODO SET DE LA CLASE *****************************
	public void setCantidad(int i){
		cantidad = i;
	}

	public void setFechaEntrega(String string){
		fecha_entrega = new String(string);
	}

	public void setIdFicha(int i){
		id_ficha = i;
	}

	public void setIdProducto(int i){
		id_producto = i;
		this.producto = null;
	}

	public void setIdTalle(int i){
		id_talle = i;
	}

	public void setProducto(Producto prod){
		if( prod != null )
			this.id_producto = prod.getIdProducto();
		this.producto = prod;
	}
	
	// METODO ESTATICOS DE LA CLASE ***********************
	public static EntregaCondicionada getEntregaCondicionada(int id_e, int id_f){
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM entrega_condicionada "+							   "WHERE id_entrega = "+id_e+" AND id_ficha = "+							   id_f;
			ResultSet rs = st.executeQuery(sentencia);
			if( rs.next() ){
				return new EntregaCondicionada(rs.getInt("id_entrega"),
						   rs.getInt("id_ficha"),rs.getInt("id_producto"),
						   rs.getInt("id_talle"),rs.getString("fecha_entrega"),
						   rs.getInt("cantidad"));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}

	public static Vector getEntregasCondicionadas(int id_f){
		Vector entregas = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM entrega_condicionada "+
							   "WHERE id_ficha = "+id_f;
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( entregas == null ) entregas = new Vector();
				entregas.addElement(new EntregaCondicionada(
									rs.getInt("id_entrega"),
									rs.getInt("id_ficha"),
									rs.getInt("id_producto"),
									rs.getInt("id_talle"),
									rs.getString("fecha_entrega"),
									rs.getInt("cantidad")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return entregas;
	}

	public static Vector getEntregasCondPorProducto(int id_p){
		Vector entregas = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM entrega_condicionada "+
							   "WHERE id_producto = "+id_p;
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( entregas == null ) entregas = new Vector();
				entregas.addElement(new EntregaCondicionada(
									rs.getInt("id_entrega"),
									rs.getInt("id_ficha"),
									rs.getInt("id_producto"),
									rs.getInt("id_talle"),
									rs.getString("fecha_entrega"),
									rs.getInt("cantidad")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return entregas;
	}

	public static Vector getEntregasCondicionadas(){
		Vector entregas = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM entrega_condicionada";
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( entregas == null ) entregas = new Vector();
				entregas.addElement(new EntregaCondicionada(
									rs.getInt("id_entrega"),
									rs.getInt("id_ficha"),
									rs.getInt("id_producto"),
									rs.getInt("id_talle"),
									rs.getString("fecha_entrega"),
									rs.getInt("cantidad")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return entregas;
	}
	
	// METODO GUARDAR DATOS DE LA CLASE *******************
	public int guardarDatos(){
		try{
			Statement st = Conexion.getStatement();
			String sentencia;
			if(this.id_entrega == 0 ){
				sentencia = "INSERT INTO entrega_condicionada VALUES(0,"+
							this.id_ficha+","+this.id_producto+","+
							this.id_talle+",'"+this.fecha_entrega+"',"+
							this.cantidad+")";
				st.executeUpdate(sentencia);
				ResultSet rs = st.getGeneratedKeys();
				if( rs.next() ) this.id_entrega = rs.getInt(1);
			}
			else{
				sentencia = "UPDATE entrega_condicionada SET id_producto = "+
							this.id_producto+", id_talle = "+this.id_talle+
							", fecha_entrega = '"+this.fecha_entrega+
							"', cantidad = "+this.cantidad+
							" WHERE id_entrega = "+this.id_entrega+" AND "+							"id_ficha = "+this.id_ficha;
				st.executeUpdate(sentencia);
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return this.id_entrega;
	}
	
	// METODO ELIMINAR DE LA CLASE ************************
	public boolean eliminar(){
		try{
			if( this.id_entrega == 0 ) return false;
			
			Statement st = Conexion.getStatement();
			String sentencia = "DELETE FROM entrega_condicionada "+
							   "WHERE id_entrega = "+this.id_entrega+
							   " AND id_ficha = "+this.id_ficha;
			st.executeUpdate(sentencia);
			this.id_entrega = 0;
			
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;			
	}
	
	// GENERA Y ELIMINAR LA ENTREGA **************************
	public void registrarEntrega(){
		if( this.getProducto() != null ){
			TalleProducto talle = this.getProducto().getTalle(id_talle);
			talle.removeStock(this.cantidad);
			talle.guardarDatos();
		}
		
		this.guardarDatos();
	}
	
	public void devolucionEntrega(){
		if( this.id_entrega != 0){
			if( this.getProducto() != null ){
				TalleProducto talle = this.getProducto().getTalle(id_talle);
				talle.addStock(this.cantidad);
				talle.guardarDatos();
			}

			this.eliminar();
		}
	}
}
